import UIKit

extension UIView {
    
    func isShowingOnKeyWindow() -> Bool {
        // 主窗口
        let keyWindow = UIApplication.sharedApplication().keyWindow
        // 转换参考的坐标系
        let rectFromKeyWindow = convertRect(frame, toView: keyWindow)
        // 当前的窗口与主窗口 是否有重叠
        let intersectRect = CGRectIntersectsRect(rectFromKeyWindow, keyWindow!.bounds)
        
        return intersectRect && !hidden && alpha > 0.01 && userInteractionEnabled && window == keyWindow
    }
    
    // MARK: - 将控件保存成图片
    /**
     *  把控件上的内容保存成一个图片
     *
     *  @param view 保存的控件
     *
     *  @return 图片
     */
    func saveToImage() -> UIImage  {
        // 1.开启一个位图上下文
        UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0)
        // 2.获取上下文
        // 3.将控制器view的layer渲染到上下文
        layer.renderInContext(UIGraphicsGetCurrentContext()!)
        // 4.获取图片
        let image = UIGraphicsGetImageFromCurrentImageContext()
        // 5.关闭位图上下文
        UIGraphicsEndImageContext()
        
        // 6.返回图片
        return image
    }
    
    /**
     移除所有子view
     */
    func removeAllSubviews() {
        subviews.forEach { $0.removeFromSuperview() }
    }
    
    /**
     为view添加毛玻璃效果
     
     - parameter toView: 目标view
     - parameter alpha:  透明度
     */
    struct BlurEffectView {
        static var blureffectView: UIVisualEffectView?
    }
    
    /**
     为view添加毛玻璃效果
     - parameter alpha: 透明度
     - parameter style: 样式
     */
    func addBlurEffectView(alpha: CGFloat, style: UIBlurEffectStyle) {
        if BlurEffectView.blureffectView == nil {
            let blurEffect = UIBlurEffect(style: style)
            let effectView = UIVisualEffectView(effect: blurEffect)
            effectView.frame.size = self.frame.size
            effectView.alpha = alpha
            BlurEffectView.blureffectView = effectView
            self.addSubview(effectView)
        }
    }
    
    func removeBlurEffectView() {
        BlurEffectView.self.blureffectView?.removeFromSuperview()
        BlurEffectView.self.blureffectView = nil
    }
}
